package com.ynny.exception.demo02;

import java.util.InputMismatchException;
import java.util.Scanner;
/**
 *  Exception   类
 *  包含了很多 子类
 *  每种子类 代表不同 异常信息
 *  1.运行时异常
 *    非必须处理：但是应该要 捕获或抛出
 *  算术异常 ---->除0
 *  数组下标越界异常 ---->去 数组 集合中不存在的下标
 *  空指针异常 ----->对象null 还去使用它相关方法
 *  2.编译时异常----->
 *    必须处理否则无法通过编译：
 *      捕获或抛出
 *      try catch :捕获异常
 *                 自行对异常进行处理 保持代码的健壮性
 *      throws :   抛出 异常
 *     将该方法里面 可能会出现的异常 抛给调用方法者 处理
 *     如果没有人自行捕获处理，最终抛出给虚拟机 变成 运行时异常
 *  3.finally ：最终的
 *     只能搭配 try catch使用
 *     无论什么情况 这里面的东西都会执行
 *
 *
 */
public class ExceptionExample01 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        try {
            System.out.print("请输入第一个整数：");
            int a = input.nextInt();
            System.out.print("请输入第二个整数：");
            int b = input.nextInt();
            int result = a/b;
            System.out.println(a + "/" + b +"=" + result);
            //1.可能会出现 多个 异常
            //2.catch也可以捕捉多个异常
            //InputMismatchException 输入的不是数字的异常
            //多个子类异常 好处 多种情况 多种应对
        } catch (InputMismatchException e) {
            System.out.println("数字格式不正确，请输入两个整数");
            // 算术异常
        } catch (ArithmeticException e){
            System.out.println("第二个整数不能为0");

            //finally 这个是 搭配 try catch 使用
            // 最终的 表示 无论什么情况 这里面的都会执行
        } finally {
            System.out.println("程序结束，释放资源");
            input.close();
        }

        //final ----> 这个用在 属性上 类上 方法上

    }
}
